//给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
// 
//
// 示例 1： 
//
// 
//输入：head = [1,2,6,3,4,5,6], val = 6
//输出：[1,2,3,4,5]
// 
//
// 示例 2： 
//
// 
//输入：head = [], val = 1
//输出：[]
// 
//
// 示例 3： 
//
// 
//输入：head = [7,7,7,7], val = 7
//输出：[]
// 
//
// 
//
// 提示： 
//
// 
// 列表中的节点数目在范围 [0, 104] 内 
// 1 <= Node.val <= 50 
// 0 <= val <= 50 
// 
// Related Topics 递归 链表 
// 👍 753 👎 0

package leetcode.editor.cn;
public class P203RemoveLinkedListElements {
    public static void main(String[] args) {
        Solution solution = new P203RemoveLinkedListElements().new Solution();
        ListNode head = new P203RemoveLinkedListElements().new ListNode();
        head.val = 1;
        ListNode node1 = new P203RemoveLinkedListElements().new ListNode();
        node1.val = 2;
        head.next = node1;
        ListNode node2 = new P203RemoveLinkedListElements().new ListNode();
        node2.val = 6;
        node1.next = node2;
        ListNode node3 = new P203RemoveLinkedListElements().new ListNode();
        node3.val = 3;
        node2.next = node3;
        ListNode node4 = new P203RemoveLinkedListElements().new ListNode();
        node3.val = 4;
        node3.next = node4;
        ListNode newHead = solution.removeElements(head, 6);
        System.out.println(newHead);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode newHead = new ListNode();
        newHead.next = head;
        ListNode nowHead = newHead;
        while (nowHead.next != null) {
            if (nowHead.next.val == val) {
                nowHead.next = nowHead.next.next;
            } else {
                nowHead = nowHead.next;
            }
        }
        return newHead.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}